#ifndef METHOD_INSPECT_H
#define METHOD_INSPECT_H
#include <string>
#include "abc_context.h"
struct MethodInspectApi
{
    std::shared_ptr<AbcNode<AbckitCoreModule>> (*getMethodModuleNode)(std::shared_ptr<AbcFunc> method);
    std::shared_ptr<AbcNode<AbckitCoreNamespace>> (*getMethodNamespaceNode)(std::shared_ptr<AbcFunc> method);
    std::shared_ptr<AbcNode<AbckitCoreClass>> (*getMethodClassNode)(std::shared_ptr<AbcFunc> method);
    std::shared_ptr<AbcPath> (*getPath)(std::shared_ptr<AbcFunc> method);
    std::string (*getMethodName)(std::shared_ptr<AbcFunc> method);
    std::string (*getClassName)(std::shared_ptr<AbcFunc> method);
    std::string (*getNamespacePath)(std::shared_ptr<AbcFunc> method);
    std::string (*getPackagePath)(std::shared_ptr<AbcFunc> method);
    std::string (*getModulePath)(std::shared_ptr<AbcFunc> method);
    AbckitCoreFunction *(*getAbckitCoreFunction)(std::shared_ptr<AbcFunc> method);
    std::set<std::shared_ptr<AbcFunc>> (*getAnonymousFuncs)(std::shared_ptr<AbcFunc> method);
    bool (*hasAnonymousFunc)(std::shared_ptr<AbcFunc> method);
    AbcFuncType (*getAbcFuncType)(std::shared_ptr<AbcFunc> method);
};

struct MethodInspectApi const *MethodInspectApiImpl();

#endif // METHOD_INSPECT_H